﻿@using Statiq.CodeAnalysis
@using Docs.Extensions
@using Microsoft.CodeAnalysis

@{
    var modelSymbol = Document.Get<ITypeSymbol>(CodeAnalysisKeys.Symbol);
    IReadOnlyList<IDocument> methods = Document.GetDocumentList(CodeAnalysisKeys.ExtensionMethods)
        ?.Where(x => x.GetBool(CodeAnalysisKeys.IsResult))
        .OrderBy(x => x.GetString(CodeAnalysisKeys.DisplayName))
        .ToList();

    if (methods?.Count > 0)
    {
        <h3>Extension Methods</h3>
        <div class="doc-summary">
            <div>
                <dl>
                    @foreach (var method in methods)
                    {
                        ISymbol reducedSymbol = method.Get<IMethodSymbol>(CodeAnalysisKeys.Symbol)?.ReduceExtensionMethod(modelSymbol);
                        string reducedName = reducedSymbol?.ToDisplayString(new SymbolDisplayFormat(
                            typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypes,
                            genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters,
                            parameterOptions: SymbolDisplayParameterOptions.IncludeType,
                            memberOptions: SymbolDisplayMemberOptions.IncludeParameters,
                            miscellaneousOptions: SymbolDisplayMiscellaneousOptions.UseSpecialTypes));

                        <div>
                            <dt>
                                @method.GetModifiers(skipStatic:true) @method.GetDocument(CodeAnalysisKeys.ReturnType).GetString(CodeAnalysisKeys.DisplayName) @Context.GetTypeLink(method,reducedName, false)
                            </dt>
                            <dd>@Html.Raw(method.GetString(CodeAnalysisKeys.Summary))</dd>
                        </div>
                    }

                </dl>
            </div>
        </div>
    }
}